package com.ruoyi.common.excel;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.ReadConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;

/**
 * EasyExcel 3.3.2 全局 BigDecimal 转换器：空/文本/非法 → null
 */
/*
@Slf4j
public class GlobalBigDecimalConverter implements Converter<BigDecimal> {

    @Override
    public Class<?> supportJavaTypeKey() { return BigDecimal.class; }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() { return null; }
    @Override
    public BigDecimal convertToJavaData(ReadConverterContext<?> context) {
        log.info(">>> BigDecimal 转换器进入, cellType={}", context.getReadCellData());

        ReadCellData<?> cellData = context.getReadCellData();
        // 空单元格
        if (cellData.getType() == CellDataTypeEnum.EMPTY) return null;
        // 数字型
        if (cellData.getType() == CellDataTypeEnum.NUMBER) {
            return cellData.getNumberValue();
        }
        // 文本型
        String str = cellData.getStringValue();
        if (StringUtils.isBlank(str)) return null;
        try {
            return new BigDecimal(str.trim());
        } catch (NumberFormatException e) {
            return null;
        }
    }
}
*/


@Slf4j
public class GlobalBigDecimalConverter implements Converter<BigDecimal> {

    @Override
    public Class<?> supportJavaTypeKey() { return BigDecimal.class; }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() { return null; }

    @Override
    public BigDecimal convertToJavaData(ReadConverterContext context) {
        try {
            ReadCellData<?> cellData = context.getReadCellData();

            // 1. 空单元格
            if (cellData.getType() == CellDataTypeEnum.EMPTY) return null;

            // 2. 数字型直接返回
            if (cellData.getType() == CellDataTypeEnum.NUMBER) {
                return cellData.getNumberValue();
            }

            // 3. 文本型
            String str = cellData.getStringValue();
            if (StringUtils.isBlank(str)) return null;
            if(str.trim().equals("-")){
                str="0";
            }
            return new BigDecimal(str.trim());
        } catch (Exception e) {
            log.warn("BigDecimal 转换异常，返回 null, cell={}", context.getReadCellData(), e);
            return null;   // 关键：绝不抛给 EasyExcel
        }
    }
}
